/**
 * @file mvp_mt.h
 * @author mc (machao@macro-video.com)
 * @brief  mt API
 * @version 0.2
 * @date 2021-08-02
 * 
 * @copyright Copyright (c) 2021
 * 
 */
#ifndef __MV_PLATFORM_MT_H__
#define __MV_PLATFORM_MT_H__

#if __cplusplus
extern "C" {
#endif

#include "mvvcd.h"

/** 移动跟踪执行动作 */
typedef enum _mt_action
{
    MT_NO_ACTION,
    MT_TURN_TO_UP,
    MT_TURN_TO_DOWN,
    MT_TURN_TO_LEFT,
    MT_TURN_TO_RIGHT,
    MT_TURN_TO_WATCH_POS,
}MVP_MT_ACTION_E;

typedef enum _mt_data_type
{
    MT_INVALID_DATA,
    MT_MD_DATA,
    MT_PD_DATA,
    MT_DATA_TYPE_MAX,
}MVP_MT_TYPE_E;

typedef mv_s32_t (*p_mt_cb)(MVP_MT_ACTION_E action, mv_s32_t step_cnt, mv_vptr_t data);

typedef struct _mt_param
{
    mv_bool_t enable;          ///< 移动跟踪功能使能
    mv_bool_t draw_box_enable; ///< 移动跟踪画框使能
    mv_bool_t tracking;        ///< 是否处于跟踪状态
    mv_bool_t privacy_enable;
    MVP_MT_TYPE_E mt_type;
    mv_s32_t  mt_step_cal_val_v;
    mv_s32_t  mt_step_cal_val_h;
    p_mt_cb   mt_cb;
}MVP_MT_PARAM_T;

/**
 * @brief 移动跟踪功能资源初始化
 * @param param 
 * @return mv_s32_t 
 */
mv_s32_t mvp_mt_init(MVP_MT_PARAM_T *param);

/**
 * @brief 移动跟踪功能资源反初始化
 * @return mv_void_t 
 */
mv_void_t mvp_mt_uninit(mv_void_t);

/**
 * @brief 移动跟踪开关设置
 * @param enable 
 * @return mv_s32_t 
 */
mv_s32_t mvp_mt_sw_set(mv_bool_t enable);

/**
 * @brief 移动跟踪开关获取
 * @param enable 
 * @return mv_s32_t 
 */
mv_bool_t mvp_mt_sw_get(mv_void_t);

/**
 * @brief 移动跟踪步长单位自适应变倍倍数(倍数越大，需要移动追踪步长单位越小，否则容易转动后视场角丢失目标)
 * @param zoom_type     in  变倍类型，类型不一样，算法也不一定一样
 * @param scale_num     in  倍数，倍数越大， 步长单位需要越小
 * @param step_unit_v   in out 垂直步长单位
 * @param step_unit_h   in out 水平步长单位
 * @return mv_s32_t 
 */
mv_s32_t mvp_mt_unit_adapt_zoom(mv_s32_t zoom_type, mv_s32_t scale_num, mv_s32ptr_t step_unit_v, mv_s32ptr_t step_unit_h);

/**
 * @brief 跟踪数据类型设置
 * @param type 
 * @return mv_s32_t 
 */
mv_s32_t mvp_mt_data_type_set(MVP_MT_TYPE_E type);

/**
 * @brief 获取当前跟踪算法的数据源
 * @return mv_s32_t 
 */
mv_s32_t mvp_mt_data_type_get();

/**
 * @brief 跟踪画框开关
 * @param draw_sw 
 * @return mv_s32_t 
 */
mv_s32_t mvp_mt_draw_box_sw_set(mv_bool_t draw_sw);

/**
 * @brief 隐私模式开关
 * @param enable 
 * @return mv_s32_t 
 */
mv_s32_t mvp_mt_privacy_sw_set(mv_bool_t enable);

#if __cplusplus
}
#endif

#endif